<?php


namespace app\test\controller;


use think\Db;

class Search
{
    public function index()
    {

        // 1.比较查询：在查询数据进行筛选时，我们采用where()方法，比如id=240
//    $result =  Db::name('user')->where('id',240)->select();
//    $result =  Db::name('user')->where('id','=',240)->select();
        // <>id不等于240的数据
//    $result =  Db::name('user')->where('id','<>',240)->select();

        // 2.区间查询 使用like进行模糊查询
//    $result =  Db::name('user')->where('email','like','xiao%')->select();

        // 2.2 like表达式还可以支持数组传递进行模糊查询
//   $result =  Db::name('user')->where('email','like',['xiao%','wu%'],'or')->select();
//  快捷方式 反过来则是 whereNoLike
//   $result =  Db::name('user')->whereLike('email','xiao%')->select();

        // 3.between表达式具有两个快捷方式whereBetween和whereNotBetween()
//    $result = Db::name('user')->whereBetween('id',[20,25])->select();

        // 4.in表达式具有两个快捷方式whereIn()和whereNotIn() 选择三条数据
//    $result = Db::name('user')->whereIn('id','19,20,21')->select();

        // 5.null和wherenull 找到为uid为null的数据
//    $result = Db::name('user')->whereNull('uid')->select();

        // 3.其他查询
        //自定义查询 exp表示自定义 快捷方式可以用whereExp，可以省略op，后面跟随自定义语句
//    $result = Db::name('user')->where('id','exp','IN(19,21,25)')->select();


        /*时间查询*/
//    如果op加了time，会自动填上格式变成2019-09-20 00:00:00
//    $result = Db::name('user')->where('create_time','> time','2019-09-20')->select();

        //时间区间查询 逆向 not between
//    $result = Db::name('user')->where('create_time','between time',['2018-1-1','2019-9-21'])->select();

        //快捷方式
//    $result = Db::name('user')->whereTime('create_time','>','2019-09-20')->select();
//还有not bettwen
//    $result = Db::name('user')->whereBetween('create_time',['2018-1-1','2019-9-21'])->select();

        //还有一种快捷方式whereBetweenTime()，如果只有一个参数就表示一天
//    $result = Db::name('user')->whereBetweenTime('create_time','2018-1-1 12:12:12','2019-12-31 12:12:12')->select();

        //默认的大于号>，可以省略 查找大于2018-1-1的数据
//    $result = Db::name('user')->whereTime('create_time','2018-1-1')->select();


        /*固定查询*/
        //查询今年的数据 2021年 year y month m day d week w  last week  yesterday
//    $result = Db::name('user')->whereTime('create_time','year')->select();


        /*其他查询*/
        // 1.查询指定时间的数据，比如十二个小时内的：
//    $result = Db::name('user')->whereTime('create_time','-12 hour')->select();

        // 2.查询两个时间字段有效期的数据，比如开会员到结束的时间：
//    $result = Db::name('user')->whereBetweenTimeField('create_time','update_time')->select();


        /*聚合查询*/
//    $result = Db::name('user')->count();//14
//    $result = Db::name('user')->max('price','false');//110 强行转换成数值
//        $result = Db::name('user')->min('price');//52
//        $result = Db::name('user')->avg('price');//85.071429
//        $result = Db::name('user')->sum('price');//1191


        /*子查询*/
        // 1.使用fetchSql()方法，可以设置不执行sql，而返回sql语句，默认true
//        $result = Db::name('user')->fetchSql(true)->select();
        // 2.
//        $result = Db::name('user')->buildSql(true);

//        $subQuery = Db::name('two')->field('uid')->where('gender','男')->buildSql(true);

//        $result = Db::name('one')->where('id','exp','IN '.$subQuery)->select();

        //使用闭包的方式进行查询
        $result = Db::name('one')->where('id','in',function($query){
    $query->name('two')->field('uid')->where('gender','男');
        })->select();


//        return json($subQuery);
//    return  Db::getLastSql();
        return json($result);
    }
}